import random

import pygame_gui
import pygame

max_value = 10
min_value = 1
operators = ['+']
# 整体背景颜色
background_color_all = (100, 180, 255)
# 设置公式背景颜色
background_color = (173, 216, 230)  # 淡蓝色

# 设置公式边框颜色和宽度
border_color = (150, 36, 200)  # 黑色边框
# 设置边框宽度
border_width = 2
def get_random_formula():
    # global max_value, min_value, operators
    # 生成随机数
    num1 = random.randint(min_value, max_value)
    num2 = random.randint(min_value, max_value)
    num3 = random.randint(min_value, max_value)
    # 生成随机符号
    operator1 = random.choice(operators)
    operator2 = random.choice(operators)
    # 生成公式
    formula = f'{num1} {operator1} {num2} '
    print(f'生成的公式是：{formula}', end='\n')
    return formula

def check_result(input_result, result):
    # 检查输入结果是否正确
    return input_result == str(result)

def calculate_formula(formula):
    # 计算公式的结果
    print(f'计算结果是：{eval(formula)}', end='\n')
    return eval(formula)


def main():
    pygame.init()
    screen = pygame.display.set_mode((500, 300))
    pygame.display.set_caption('数据计算小游戏')

    manager = pygame_gui.UIManager((500, 300))
    # 创建样式表
    # style_sheet = pygame_gui.UIManager.DefaultStyleSheet
    # style_sheet.text_entry_line_background_colour = (255, 165, 0)  # 橙色背景



    # 创建一个文本输入框
    text_input = pygame_gui.elements.UITextEntryLine(
        # 创建一个相对矩形对象 第一个参数是左上角坐标，第二个参数是宽高
        relative_rect=pygame.Rect((100, 100), (100, 50)),
        manager=manager
    )

    # 设置字体和颜色
    font = pygame.font.SysFont("arial", 24, bold=True)
    # 此代码块为创建并渲染文本的函数调用
    # 将指定的文本字符串渲染为一个图像表面
    # 参数说明：
    #   text: 要渲染的文本字符串，此处为 "Hello, World!"
    #   True: 表示启用文本的抗锯齿处理，提供更平滑的文本边缘
    #   (0, 0, 0): 文本的颜色，此处为黑色 (R, G, B) 格式
    # 返回值：
    #   返回一个渲染后的文本图像表面，可以用于在游戏或GUI中显示文本
    text_surface = font.render("Hello, World!", True, (0, 0, 0))

    clock = pygame.time.Clock()

    running = True
    score = 0;
    # 生成随机数和公式
    formula = get_random_formula();
    while running:
        # 此段代码用于更新游戏的帧率并处理游戏事件
        time_delta = clock.tick(60) / 1000.0  # 计算自上一帧以来的时间差（秒为单位）
        for event in pygame.event.get():  # 处理pygame中发生的所有事件
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    # 计算
                    result = calculate_formula(formula)
                    result_input = text_input.get_text()
                    print(f'输入的答案是：{text_input.get_text()}', end='\n')
                    #  获取文本输入框中的文本
                    if check_result( result_input,result):
                        score = score+1;
                        print('正确'
                              '\n==================')
                        formula = get_random_formula();
                        text_input.set_text('')
                    else:
                        print('错误'
                              '\n------------------')
            manager.process_events(event)

        manager.update(time_delta)

        # 设置背景颜色
        screen.fill(background_color_all)
        manager.draw_ui(screen)
        text_surface = font.render("formul: "+str(formula), True, (0, 0, 0))
        # 获取文本表面的尺寸
        text_rect = text_surface.get_rect()
        text_rect.center = (150,  50)  # 设置文本居中

        # 设置背景矩形尺寸，假设边框宽度为2
        background_rect = pygame.Rect(text_rect.x - 2, text_rect.y - 2,
                                      text_rect.width + 4, text_rect.height + 4)



        # 绘制背景颜色
        pygame.draw.rect(screen, background_color, background_rect)

        # 绘制边框
        pygame.draw.rect(screen, border_color, background_rect, border_width)

        # 然后正常绘制文本
        screen.blit(text_surface, (text_rect.x, text_rect.y))  # 注意使用get_rect()得到的位置信息

        # 设置得分
        text_score = font.render("score: "+str(score), True, (0, 0, 0))

        screen.blit(text_score, (0, 0))  # 注意使用get_rect()得到的位置信息



        pygame.display.flip()

    manager.kill()
    pygame.quit()

if __name__ == '__main__':
    main()
